#ifndef COMBO_STATE_H
#define COMBO_STATE_H

#include <iostream>

class ComboState
{
public:
	/**************************************************************************
	* Define the Button enum.  The possible values are
	* N, NE, E, SE, S, SW, W, NW, PUNCH, KICK, and COUNT
	**************************************************************************/
	enum Button  {N,NE,E,SE,S,SW,W,NW,PUNCH,KICK,COUNT};
	char *name;
	bool _next_state;

private:
	/**************************************************************************
	* Define two member variables so that the other member functions will work.
	* Access must be PRIVATE.
	**************************************************************************/
	Button move,attack;

public:
	/**************************************************************************
	* Declare the ComboState default constructor.
	**************************************************************************/
	ComboState(Button move,Button attack); 
	/**************************************************************************
	* Declare the ComboState copy constructor and assignment operator.
	**************************************************************************/
	//ComboState & operator (const ComboState &rhs);
	
	ComboState(ComboState const& combo);
	/**************************************************************************
	* Declare the ComboState destructor.
	**************************************************************************/
	~ComboState();

	bool has_no_next_state(Button b);

    ComboState* get_next_state(Button b);

	const char* get_name() const;

	void set_name(const char* name);


private:
	void _clear_name();

public:
	friend std::ostream& operator<<(std::ostream& os, const ComboState& state);
};

void Charger(ComboState* start_state);

void Masher(ComboState* start_state);

void Shotokan(ComboState* start_state);

#endif
